#传统方式的使用
import os

import dotenv
from langchain_classic.agents import AgentType, initialize_agent
from langchain_community.tools import TavilySearchResults
from langchain_core.tools import StructuredTool, Tool
from langchain_openai import ChatOpenAI
from langchain_experimental.utilities import PythonREPL  # 添加此行以导入PythonREPL
#使用Tavily搜索内容 ，注册地址https://app.tavily.com/

"""
例子：当前美股纳斯达克指数多少，跟去年同比涨幅多少。
"""
dotenv.load_dotenv()

# 搜索工具
search = TavilySearchResults(max_results=5)
search_tool = Tool(
    name="search_tavily",
    description="使用Tavily进行搜索互联网上的信息,并将结果返回给用户",
    func=search.run,
)

#计算工具
python_repl = PythonREPL()
calc_tool = StructuredTool.from_function(
    func=python_repl.run,
    name="calc",
    description="用于执行科学计算，例如百分比，加减乘除，以及计算百分比和概率。",
)

#获取大语言模型
chat_model = ChatOpenAI(
        model=os.getenv("MODEL_NAME")
        , base_url=os.getenv("BASE_URL")
        , api_key=os.getenv("API_KEY")
        , temperature=0.8  # 精确度
        , max_tokens=1024  # 回答长度
    )

#获取Agent实例
agent = AgentType.ZERO_SHOT_REACT_DESCRIPTION #获取一个没有样例的实例

#获取AgentExecutor实例
agent_executor = initialize_agent(
    tools=[search_tool]
    , llm=chat_model
    , agent=agent
    , verbose=True #显示运行过程
)

#调用invoke()得到响应
response = agent_executor.invoke("当前美股纳斯达克指数多少，跟去年同比涨幅多少")
print(response)